#ifndef CODEINSTRUCtiON_HPP
#define	CODEINSTRUCtiON_HPP

#include "Operande.hpp"
#include "TableId.hpp"

using namespace std;

class CodeInstruction {

public:
    CodeInstruction();
    CodeInstruction(const CodeInstruction& codInst);
    ~CodeInstruction();


    // Le debut de prog 3 adresses
    string Deb();

    string Add(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Add(TableId &ti, Operande &Arg1, Operande &Arg2);

    string Sub(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Sub(Operande &Arg1, Operande &Arg2);


    string Cpy(TableId &ti, Operande &Res, Operande &Arg1);
    string If(TableId &ti, Operande &Res/*, Operande &Arg2*/);

    string And(TableId &ti, Operande &Res, Operande &Arg1, Operande &Arg2);
    string Or(TableId &ti, Operande &Res, Operande &Arg1, Operande &Arg2);
    string Xor(TableId &ti, Operande &Res, Operande &Arg1, Operande &Arg2);
    string Not(TableId &ti, Operande &Res, Operande &Arg1);


    string Mul(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);

    string Div(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);

    string Mod(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);

    string Eq(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Neq(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Lt(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Lte(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Gt(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);
    string Gte(TableId &ti, Operande &resultat, Operande &Arg1, Operande &Arg2);

private:
};

#endif
